﻿namespace Rsdn.Janus.CoreServices.NavigationTree
{
    using System;
    using System.Windows.Forms;

    /// <summary>
    /// Для использования в расширениях дерева навигации для виртуальных формумов
    /// </summary>
    public interface IVirtualForumProvider
    {
        /// <summary>
        /// Определяет нужно ли производить обновления для данного сообщения. Параметр (msgIn is Msg)
        /// Возращает true если необходимо обновление
        Func<object, bool> IsUpdateNeedFunc { get; }

        /// <summary>
        /// Загружает только счетчики для форума. Входным параметром является ид форума и MessageCounters.
        /// </summary>
        Action<int, MessageCounters> LoadCountersAction { get; }

        Func<bool, MessageCounters, IMsg> LoadTopicsAsChildrenFunc { get; }

        /// <summary>
        /// Получить описание форума.
        /// </summary>
        /// <param name="itemId">Пока не используется</param>
        /// <returns></returns>
        INavigationTreeItemInfo GetItemInfo(string itemId);

        //IDisposable SubscribeNodesChanged(IServiceProvider serviceProvider, IObserver<EventArgs> observer);

        /// <summary>
        /// Создает GUI элемент для прорисовки сообщений форума.
        /// </summary>
        /// <returns>Возвращает null для использования стандартного грид контрола</returns>
        Control CreateGuiControl();
    }
}